package ar.edu.caece.compiler.grammars.sample2.tokens;



public class NumToken extends SampleToken {
	
	public static interface NumTokenVisitor extends TokenVisitorInterface {
		public SampleGrammarSymbol numCase(NumToken llamador, SampleGrammarSymbol param);
	}
	
	public static abstract class NumChainVisitor implements NumTokenVisitor {
		private TokenVisitorInterface siguiente;
		protected NumChainVisitor(TokenVisitorInterface siguienteVisitor) {
			siguiente = siguienteVisitor;
		}
		
		@Override
		public SampleGrammarSymbol defaultCase(SampleToken llamador, SampleGrammarSymbol param) throws Exception {
			return llamador.execute(siguiente, param);
		}
	}
	
	public NumToken(String string) {
		setLexema(string);
	}

	@Override
	public SampleGrammarSymbol execute(TokenVisitorInterface visitor, SampleGrammarSymbol param) throws Exception {
		System.out.println("Entrando al visitor de num con " + visitor.getClass());
		return (visitor instanceof NumTokenVisitor)? 
			   ((NumTokenVisitor) visitor).numCase(this, param):
               visitor.defaultCase(this, param);
		
	}

	@Override
	public String getRepresentation() {
		return "" + getLexema();
	}

}
